package com.hulk.rpc.filter;

import com.hulk.rpc.protocol.Request;
import com.hulk.rpc.protocol.Response;

/**
 * @author xuxukang
 * @date 2019-04-16 22:11
 */
public interface RpcServerFilter extends ServerFilter {

  String SERVER_FILTER_DENY = "rpc server filter deny this request";

  /**
   * 服务端接收到请求后预先执行
   *
   * @param request 请求，不为空
   * @return true表示服务端允许该请求；false表示服务端拒绝该请求
   */
  boolean onReceive(Request request);

  /**
   * 服务端返回响应之前
   *
   * @param request  请求，不为空
   * @param response 返回结果，不为空
   */
  void onSend(Request request, Response response);

  /**
   * @param request   请求，可能为空
   * @param response  返回结果，可能为空
   * @param throwable 异常，不为空
   */
  void onError(Request request, Response response, Throwable throwable);

}
